From a37512ea464148b376bf90fed097a9a9102ef5f2 Mon Sep 17 00:00:00 2001 From: "tw275@labyrinth.cl.cam.ac.uk" Date: Wed, 28 Jul 2004 15:41:22 +0000 Subject: [PATCH] bitkeeper revision 1.1108.30.3 (4107c922o_Bx20-5N8PsVBcjjHYmQA) More work on wizard --- .rootkeys | 1 + tools/python/xen/sv/CreateDomain.py | 76 +++++++++++++-------- tools/python/xen/sv/Wizard.py | 98 +++++++++++++++++++++++----- tools/python/xen/sv/util.py | 9 +-- tools/sv/Makefile | 3 +- tools/sv/images/finish.png | Bin 0 -> 1189 bytes 6 files changed, 138 insertions(+), 49 deletions(-) create mode 100644 tools/sv/images/finish.png diff --git a/.rootkeys b/.rootkeys index be5ccf20d1..5853abec5a 100644 --- a/.rootkeys +++ b/.rootkeys @@ -443,6 +443,7 @@ 40cf2937Z8WCNOnO2FcWdubvEAF9QQ tools/python/xen/xm/shutdown.py 40fcefb2K1xqVVT4D-p7nL2GzS4scg tools/sv/Main.rpy 40ffbcb66Dj5F-1kCK9BcgSqCWkt1w tools/sv/Makefile +4107c921_OR9NTSv2dKFiLCXxrXoxA tools/sv/images/finish.png 40fcefb3wXQMsl9WkgQAVtdrupm4sw tools/sv/images/left-end-highlight.jpg 40fcefb3K6ESt5sQhD9aCQRscQIlXQ tools/sv/images/left-end-no-highlight.jpg 40fcefb3BUT98zPzW8kAFKuxGdh4XA tools/sv/images/middle-highlight.jpg diff --git a/tools/python/xen/sv/CreateDomain.py b/tools/python/xen/sv/CreateDomain.py index 56ea043db8..62123871bd 100644 --- a/tools/python/xen/sv/CreateDomain.py +++ b/tools/python/xen/sv/CreateDomain.py @@ -1,46 +1,70 @@ -from xen.sv.Wizard import Wizard, Sheet +from xen.sv.Wizard import * +from xen.sv.util import * class CreateDomain( Wizard ): def __init__( self, urlWriter ): - sheets = { 0: CreatePage0, - 1: CreatePage1, - 2: CreatePage2, - 3: CreatePage3 } + sheets = [ CreatePage0, + CreatePage1, + CreatePage2, + CreatePage3, + CreatePage4, + CreateFinish ] Wizard.__init__( self, urlWriter, "Create Domain Wizard", sheets ) class CreatePage0( Sheet ): def __init__( self, urlWriter ): - - feilds = [( 'name', 'VM Name:'), - ( 'memory', 'RAM (Mb):' )] - - Sheet.__init__( self, urlWriter, feilds, "Create New Domain", 0 ) - + Sheet.__init__( self, urlWriter, "General", 0 ) + self.addControl( InputControl( 'vm_name', 'VM Name', 'VM Name:' ) ) + self.addControl( InputControl( 'memory', '64', 'Memory (Mb):' ) ) + class CreatePage1( Sheet ): def __init__( self, urlWriter ): - - feilds = [( 'kernel_type', 'Kernel Type:'), - ( 'kernel_location', 'Kernel location:')] - - Sheet.__init__( self, urlWriter, feilds, "Setup Kernel Image", 1 ) - + Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 ) + self.addControl( InputControl( 'kernel_image', '/boot/vmlinuz-2.4.26-xenU', 'Kernel Image:' ) ) + self.addControl( InputControl( 'kernel_params', '', 'Kernel Command Line Parame:' ) ) + class CreatePage2( Sheet ): def __init__( self, urlWriter ): - - feilds = [( 'vbd_dom0', 'Location of vbd:'), - ( 'vbd_dom0', 'Vitualised location:')] - - Sheet.__init__( self, urlWriter, feilds, "Setup Virtual Block Devices", 2 ) - + Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 2 ) + self.addControl( InputControl( 'num_vbds', '1', 'Number of VBDs:' ) ) + class CreatePage3( Sheet ): def __init__( self, urlWriter ): - - feilds = [( 'vifs', 'Number of Vifs:')] + Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 3 ) + + def write_BODY( self, request ): + previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference + num_vbds = previous_values.get( 'num_vbds' ) + + for i in range( int( num_vbds ) ): + self.addControl( InputControl( 'vbd%s_dom0' % i, '/dev/sda%i' % i, 'Device %s name:' % i ) ) + self.addControl( InputControl( 'vbd%s_domU' % i, '/dev/sda%i' % i, 'Virtualized device %s:' % i ) ) + + self.addControl( InputControl( 'root_dev', '/dev/sda1', 'Root device (in VM):' ) ) + + Sheet.write_BODY( self, request ) + +class CreatePage4( Sheet ): + + def __init__( self, urlWriter ): + Sheet.__init__( self, urlWriter, "Network settings", 4 ) + self.addControl( InputControl( 'hostname', 'hostname', 'VM Hostname:' ) ) + self.addControl( InputControl( 'ip_addr', '1.2.3.4', 'VM IP Address:' ) ) + self.addControl( InputControl( 'ip_subnet', '255.255.255.0', 'VM Subnet Mask:' ) ) + self.addControl( InputControl( 'ip_gateway', '1.2.3.4', 'VM Gateway:' ) ) + +class CreateFinish( Sheet ): + + def __init__( self, urlWriter ): + Sheet.__init__( self, urlWriter, "All Done", 5 ) - Sheet.__init__( self, urlWriter, feilds, "Create New Domain - 4", 3 ) + def write_BODY( self, request ): + request.write( "
%s
" % sxp2prettystring( string2sxp( self.passback ) ) ) + request.write( "

" % self.passback ) + request.write( "

" % self.location ) diff --git a/tools/python/xen/sv/Wizard.py b/tools/python/xen/sv/Wizard.py index b9436d0ba1..d0b7a77177 100755 --- a/tools/python/xen/sv/Wizard.py +++ b/tools/python/xen/sv/Wizard.py @@ -32,16 +32,21 @@ class Wizard( HTMLBase ): if op == 'next': currSheet += 1 elif op == 'prev': - currSheet -= 1 + currSheet -= 1 + + sheet = self.sheets[ currSheet ]( self.urlWriter ) - self.sheets[ currSheet ]( self.urlWriter ).write_BODY( request ) + sheet.parseForm( request ) + sheet.write_BODY( request ) request.write( "" ) request.write( "

" ) if currSheet > 0: - request.write( " " ) - if currSheet < ( len( self.sheets ) - 1 ): - request.write( "" ) + request.write( " " ) + if currSheet < ( len( self.sheets ) - 2 ): + request.write( "" ) + elif currSheet == ( len( self.sheets ) - 2 ): + request.write( "" ) request.write( "

" ) request.write( "" ) @@ -49,14 +54,17 @@ class Wizard( HTMLBase ): pass def op_prev( self, request ): + pass + + def op_finish( self, request ): pass class Sheet( HTMLBase ): - def __init__( self, urlWriter, feilds, title, location ): + def __init__( self, urlWriter, title, location ): HTMLBase.__init__( self ) self.urlWriter = urlWriter - self.feilds = feilds + self.feilds = [] self.title = title self.location = location self.passback = "()" @@ -71,9 +79,9 @@ class Sheet( HTMLBase ): if temp_passback is not None and len( temp_passback ) > 0: temp_passback = temp_passback[ len( temp_passback )-1 ] else: - temp_passback = "(passback )" + temp_passback = "( )" - last_passback = ssxp2hash( string2sxp( temp_passback ) ) + last_passback = ssxp2hash( string2sxp( temp_passback ) ) #use special function - will work with no head on sxp if DEBUG: print last_passback @@ -90,22 +98,76 @@ class Sheet( HTMLBase ): if DEBUG: print self.passback - return last_passback #return the hash - def write_BODY( self, request ): request.write( "

%s

" % self.title ) - previous_values = self.parseForm( request ) #get the hash for quick reference + previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference - for (feild, name) in self.feilds: - value = previous_values.get( feild ) - if value is None: - value = '' - request.write( "

%s

" % (name, feild, value) ) + request.write( "" ) + for (feild, control) in self.feilds: + control.write_Control( request, previous_values.get( feild ) ) + + request.write( "
" ) + request.write( "

" % self.passback ) - request.write( "

" % self.location ) + request.write( "

" % self.location ) + + def addControl( self, control ): + self.feilds.append( [ control.getName(), control ] ) + +class SheetControl( HTMLBase ): + + def __init__( self ): + HTMLBase.__init__( self ) + self.name = "" + + def write_Control( self, request, persistedValue ): + request.write( "%s" % persistedValue ) + + def validate( self ): + return True + + def getName( self ): + return self.name + + def setName( self, name ): + self.name = name + +class InputControl( SheetControl ): + + def __init__( self, name, defaultValue, humanText): + SheetControl.__init__( self ) + self.setName( name ) + + self.defaultValue = defaultValue + self.humanText = humanText + + def write_Control( self, request, persistedValue ): + if persistedValue is None: + persistedValue = self.defaultValue + + request.write( "

%s

" % (self.humanText, self.getName(), persistedValue) ) + +class TextControl( SheetControl ): + + def __init__( self, text ): + SheetControl.__init__( self ) + self.text = text + + def write_Control( self, request, persistedValue ): + request.write( "

%s

" % self.text ) + +class SmallTextControl( SheetControl ): + + def __init__( self, text ): + SheetControl.__init__( self ) + self.text = text + + def write_Control( self, request, persistedValue ): + request.write( "

%s

" % self.text ) + diff --git a/tools/python/xen/sv/util.py b/tools/python/xen/sv/util.py index c14137609f..b332b60482 100755 --- a/tools/python/xen/sv/util.py +++ b/tools/python/xen/sv/util.py @@ -13,10 +13,11 @@ def sxp2hash( s ): sxphash = {} for child in sxp.children( s ): - if child is types.ListType: - sxphash[ child[0] ] = sxp2hash( child[1] ) - else: - sxphash[ child[0] ] = child[1] + if isinstance( child, types.ListType ) and len( child ) > 1: + if isinstance( child[1], types.ListType ) and len( child ) > 1: + sxphash[ child[0] ] = sxp2hash( child[1] ) + else: + sxphash[ child[0] ] = child[1] return sxphash diff --git a/tools/sv/Makefile b/tools/sv/Makefile index b8f2a7a116..c7bd3d5880 100755 --- a/tools/sv/Makefile +++ b/tools/sv/Makefile @@ -36,7 +36,8 @@ install: install -m0644 images/next.png $(sv_insdir)/images install -m0644 images/previous.png $(sv_insdir)/images - + install -m0644 images/finish.png $(sv_insdir)/images + # make include folder mkdir -p $(sv_insdir)/inc diff --git a/tools/sv/images/finish.png b/tools/sv/images/finish.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5d18a9b7f6091f3a92723f27029b7629ee45e0 GIT binary patch literal 1189 zcmV;W1X}xvP)?bz6rVnQ>h|v4JG-}U-)epM@Im_j|Nm@2<-fSN zxL%5ji(h7CWj&^(q_iEV{_fwue;Gc1{>mdTuC87O^zkGhX88U4H(U)s z0HIh03=SrsZ#s@0J5~yFG0X=rOOV;v04NwiKvh+BmYJDZKG2~*U}69P!~#nx!vO+_3FH!>HHYHMixEHo zvAlo(UW%9$2ueJ1a&io6YHAF8e0*TTK|Tce4(3Aw!TBE`fS7=qm3f($%7 zJYbiCLIdPe5JoNl@Bx4T0$KK-7=@rB2jm0fvJT`MVC2J#D0~2D&0l~3Vgd%mGh*xm z8T|P1V=(^u^(!b2!149``EwKp;0sBB0Adjq7QPIuLbM5GXprk)y?O=q9k3Vzm-4_Y z15O+uHWB&lEkFRVaB^~90@6zy!qrbR4`|A;uz5))EpDS_=?BOu$HA1FT_x z5E*swdJBY!u?Xs`Z@`e-0}w!z+BPf&h0F(1i zbl(x{TLPB726|>T$R2i9B06IPgm=1o!%mB#)1P~K?f&eP~2W*b@0rQ0mP{9_UtG4m{ftLCLgH#